package com.yuandian.business.monitor.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuandian.api.business_monitor.entity.BusinessProcess;
import com.yuandian.api.business_monitor.po.AlarmParams;
import com.yuandian.api.business_monitor.po.QueryBusinessOverviewParams;
import com.yuandian.api.business_monitor.po.SystemOverviewParams;
import com.yuandian.api.business_monitor.vo.*;
import com.yuandian.api.management.vo.StepExportVo;
import com.yuandian.po.BaseSearch;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 说明：业务概况mapper
 *
 * @Author yanjun
 * @Date 2020/10/26 16:15
 */
@Mapper
public interface BusinessOverviewMapper {

	/**
	 * 查询业务概况列表
	 *
	 * @param params 业务概况查询参数
	 * @return 业务概况vo对象集合
	 */
	List<BusinessOverviewVo> queryBusinessOverviewList(Page<BusinessOverviewVo> page, @Param("params") QueryBusinessOverviewParams params);

	/**
	 * 查询业务概况列表
	 *
	 * @param params 业务概况查询参数
	 * @return 业务概况vo对象集合
	 */
//	List<BusinessOverviewVo> queryBuniessDateByarams(
//			Page<BusinessOverviewVo> page, @Param("params") QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码和时间范围查询业务健康度、成功率等环形图信息
	 *
	 * @param params 业务总览查询参数
	 * @return 业务总览
	 */
	BusinessOverviewVo queryBusinessDate(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码和时间范围查询业务健康度、访问量、平均响应时长
	 *
	 * @param params 查询参数
	 * @return 业务健康度、访问量、平均响应时长结果集
	 */
	List<BusinessLineVo> queryBuinessLineChartData(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询相应的步骤分析信息
	 *
	 * @param params 查询参数
	 * @return 通用结果集
	 */
	List<BusinessProcessVo> queryBuinessProcessAnalysis(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询步骤趋势分析数据
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	List<BusinessProcessVo> queryBuinessProcessTrendData(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询步骤趋势分析数据
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	List<BusinessProcess> queryBuinessProcessOrderIndex(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 步骤列表查询
	 *
	 * @param params 查询参数
	 * @return
	 */
	List<StepExportVo> queryStepList(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 查询步骤编码
	 *
	 * @param params 查询参数
	 * @return
	 */
	List<BusinessProcessVo> queryStepCodeList(@Param("params") QueryBusinessOverviewParams params);


	/**
	 * 获取总转换率和访问量
	 *
	 * @param params 查询参数
	 * @return
	 */
	List<ConversionRateVo> getConversionRate(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 获取网端详情
	 *
	 * @param page   分页参数
	 * @param params 查询参数
	 * @return
	 */
	List<SegmentDetailInfoVo> getSegmentDetailList(Page<SegmentDetailInfoVo> page, @Param("params") QueryBusinessOverviewParams params);

	//
//    Double getTotalConversionRate(@Param("params") QueryBusinessOverviewParams params, @Param("tableNameList") List<MultipleTableInfo> realQueryTableInfos);
//

	/**
	 * 查询网端总览
	 *
	 * @param params        查询参数
	 * @param resourceCodes
	 * @return
	 */
	List<SegmentIndicatorTrendVo> querySegmentOverviewRoad(@Param("params") QueryBusinessOverviewParams params, @Param("list") Set<String> resourceCodes);

	/**
	 * @param page   分页参数
	 * @param params 查询参数
	 * @return
	 */
	List<BusiStepStatVo> getBusiStepStatList(Page<BusiStepStatVo> page, @Param("params") QueryBusinessOverviewParams params);


	/**
	 * 查询系统访问数据总览
	 *
	 * @param tPage  分页参数
	 * @param params 查询参数
	 * @return 系统数据总览
	 */
	List<SystemOverviewVo> querySystemOverview(Page<SystemOverviewVo> tPage, @Param("params") SystemOverviewParams params);


	/**
	 * 告警详情-分类统计各类型告警（告警类型环形图---业务监控详情页面）
	 * 按照系统ID、业务编码、时间范围、网端ID等分类统计各类型告警
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围、网端ID）
	 * @return 告警列表
	 */
	List<AlarmProportionVo> queryBusinessMonitorAlarmTypePercent(@Param("params") AlarmParams params);


	/**
	 * 查询平均指标值
	 * @param params	请求参数
	 * @return 结果集
	 */
	int queryAvgIndicatorValue(@Param("params") QueryBusinessOverviewParams params);

	/**
	 * 查询峰值
	 * @param params	参数对象
	 * @param scale		刻度值
	 * @param scaleType	刻度类型
	 * @return	结果集
	 */
	BusinessAvgAndPeakVo queryPeakValue(@Param("params") QueryBusinessOverviewParams params,
										@Param("scale") int scale,
										@Param("scaleType") String scaleType,
										@Param("baseSearch") BaseSearch baseSearch);

}
